高级程序员的酒后碎碎念
最近有一篇文章在国外很火,叫 Drunk Post: Things I've learned as a Sr Engineer(我的翻译:酒后发帖,作为一名高级工程师学到的事情)。
全文是一名高级工程师的只言片语。按照他的说法,他是在酒后写下的这些内容,总结自己在过去 10 年的工作感悟。
虽说是酒后发言,但在我看来没有什么政治不正确的地方,甚至连相对偏激的观点都没有,只是一名工程师的真实感悟而已。
我很喜欢他的很多观点,当然,也有不完全同意的地方。但这不重要,重要的是,这是一名工程师的真实感悟。我喜欢真实的东西。
这篇文章不完全是逐字翻译,我对他的一些零碎观点进行了分类整理;对于不适用于国内职场的内容,以及很个人的内容(比如恋爱相关)进行了删减;同时在语言上,我添加了一些自己的东西。
对原文感兴趣的同学,可以点击这篇文章的阅读原文。
以下为我整理的正文。
关于技术
• 技术栈不重要。所有的领域都有 10 到 20 个核心的技术原则,或者思想,或者方法,或者什么不管你叫它是什么东西。技术栈只不过是让这些东西更加简单,易于使用。没必要因为技术栈而烦恼。
(bobo 说:我曾写过一篇文章,就叫技术栈不重要。我也经常对问我 A 语言好?还是 B 语言好?或者对 C 语言的未来怎么看?的同学说:选择领域,而非语言。一旦选定了领域,跟着领域的技术栈发展就好。)
• 近乎所有和工具相关的“圣战”,诸如 Vim vs Emacs,或者 macOS vs Linux,都不重要。
• 不同的工具适用于不同的工作。Python 和 C++ 适合完成的任务显然是不同的。如果你不确定自己做什么,那就学 Java 吧。Java 是一个像屎一样的语言,但是它近乎可以胜任做所有事情。
• 最牛 b 的语言是 Lisp;投资回报率比最高的语言是 SQL。
• 测试很重要,但 TDD 是 TM 的邪教。
• 我越老,越觉得动态语言牛 b。
• 在我刚刚接触一个语言或者一种技术的时候,我不会讨厌它;但是随着我逐渐深入,对这种语言或者技术越来越熟悉,我会开始越来越讨厌它。但这不影响我向我的客户推荐它。
• 我越接近产品,赚到的钱越多,同时,我也越觉得自己有价值,不管我当下工作的技术栈是怎样的。
• 好的代码是可以被初级工程师理解的;牛 b 的代码是可以被计算机专业大一学生理解的;而代码的最高境界,是没有代码。
(bobo 说:我对这句话的理解,他不是在吹现在“流行”的 low-code 或者 no-code,而是在说,代码的目的是解决问题,而有些问题的解决方案,不需要代码。)
• 在我的团队里,有很多分析师,属于半技术人员。所谓的半技术人员是指,他们懂得编程(Programming),却不懂软件开发(Software Engineering)。这非常棒。因为我发现,一旦他们不能理解我的代码了,说明我的代码的设计出了问题,一定有更好的设计方案存在。说实话,我通过他们学会的东西,比很多工程师大牛还要多。
• 算法和数据结构很重要。但是,我从来没有见过药剂师的面试内容是有机化学。计算机行业的面试流程或许出了什么问题。
• 对于工程师来说,最被低估的技能是:如何写好文档;另外,如何写出好的项目提案也非常重要。
• 我了解太多和安全相关的知识,以至于我很明白我对安全一无所知。
• 成为一名好的工程师,意味着你需要知道很多“最佳实践”;而成为一名资深工程师,意味着你需要知道什么时候要舍弃最佳实践。
• 应该对一些流行的技术用语保持谨慎。比如“大数据”,到底多大的数据叫“大”?
关于职场
• 我在一些公司里,交到了非常棒的朋友。但能结交到好朋友,并不是我对一个工作的要求。曾经有过一份工作,我非常满意,但其间,没有交到任何好朋友;而在另一个我非常不满意的工作中,我结交到了极其棒的朋友。
• 当我刚开始工作的时候,我完全沉迷于技术,或者是程序,或者是计算机科学的世界中。现在回想起来,我觉得我过于沉迷了。
(bobo 说:在职场,有很多东西比技术重要。不是说技术不重要,而是说技术不是唯一重要的东西。)
• 期权有可能一文不值,也有可能让你财富自由。如果在你的公司,工程师的数量超过了 100,那么在未来的十年,你手里的期权可能是值钱的。
• 我从来没有在 FAANG 这样的大厂呆过,我不知道我错过了什么。但是我雇佣过很多来自大厂的工程师,我发现他们很多人也不知道自己在做什么。
• 我认为我们应该雇尽量多的实习生。最关键的原因是,他们敢于质疑和批评。
• 一名优秀的管理者和一名优秀的工程师,其实有很多相同的特质。
• 应该对你的 manager 足够诚实。不用绝对的诚实,但应该至少能保持做真实的自己。最坏的情况是什么?不过是开除我而已。我有信心在两周时间里就找到新的工作。
• 你的 manager 的权力可能比你想象的低很多。如果你曾经思考过,为什么 Manager XYZ 同学不开除掉天天不学无术浑水摸鱼的 ABC 同学,那么原因大概率是:他没有权力这么做。
• 在大多数时候,title 不重要。无论是在什么公司,核心杰出首席工程师的 title 也没什么意义。人们最在意的是:你做过什么,取得了什么成就。
• 最牛 b 的领导力的表现是,我的领导把一个 100% 属于我的错误的责任承担了下来。我会为这样的领导赴汤蹈火。
• 我遇到过的优秀的领导都有一个特质:他们一边能够理解并且拥护我的想法,同时也能向我解释那些和我冲突的想法。我在努力成为那样的人。
关于跳槽
• 我的职业发展的一个重要方式是:跳槽。
• 一旦我对现在的工作不满意了,我觉得可能已经是时候跳槽了。
• 如果我在一个季度的时间里,超过一次在凌晨两点被叫去处理紧急的技术问题,那么说明我所在的项目有一些严重的问题。我会选择:或者努力把问题找到并修复,或者跳槽。
• 如果团队成员开始“分配” bug 或者故障的责任,那么可能是时候跳槽了。
• 如果我经常觉得自己是会议室里最聪明的人,那么我觉得应该跳槽了。另外,我遇到过的最聪明的人,是一个数学博士。
关于生活
• 手腕,脖子和腰椎很重要。多花一些钱在你的办公设施上。
• 我对自我价值的评判和我的报酬没什么关系。资本主义对于自我价值的定义是非常差的。
• 作为一名软件工程师,最酷的事情是,你能遇到很多和你有相同思考方式的人。不一定是因为相同的兴趣爱好,或者喜欢同一种运动或者电视或者电影,而是因为在遇到问题需要解决的时候,大家有同样的思维模式。这非常酷。
• 做我喜欢的事情或许不是那么重要;或许更重要的是:不去做我讨厌的事情。
• 工作和生活之间应该有界限。
• 对所有的人保持善良。不是因为这样对你的职业发展有什么作用(虽然确实有作用),而是因为善良本身就是有价值的。
大家加油!:)
本文相关阅读推荐: